package com.loe.test.chart;

import android.graphics.Color;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.formatter.ValueFormatter;

import java.util.ArrayList;
import java.util.List;

import kotlin.Pair;

public class BarChartManager
{
    public BarChart chart;

    private int textColor = Color.parseColor("#ffffff");

    public BarChartManager(BarChart barChart)
    {
        this.chart = barChart;
        initChart();
    }

    //初始化
    private void initChart()
    {
        //图相对于上下左右的偏移
        chart.setExtraOffsets(15, 35, 22, 25);

        chart.setScaleEnabled(false);

        /*** X轴 ***/
        XAxis xAxis = chart.getXAxis();
        //将X轴的值显示在中央
//        xAxis.setCenterAxisLabels(true);
        xAxis.setDrawGridLines(false);  //是否绘制X轴上的网格线（背景里面的竖线）
        xAxis.setTextColor(textColor);
        xAxis.setTextSize(14);
        xAxis.setYOffset(10);
        xAxis.setAxisLineColor(textColor);   //X轴颜色
        xAxis.setAxisLineWidth(0.5f);           //X轴粗细
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);        //X轴所在位置   默认为上面
//        xAxis.setLabelCount(4,true);

        /*** Y轴 ***/
        YAxis axisLeft = chart.getAxisLeft();
        axisLeft.setDrawGridLines(true);  //是否绘制Y轴上的网格线（背景里面的横线）
        axisLeft.setGridColor(0x33FFFFFF);
        axisLeft.setTextColor(textColor);
        axisLeft.setTextSize(16);
        axisLeft.setAxisLineColor(textColor);  //Y轴颜色
        axisLeft.setAxisLineWidth(0.5f);           //Y轴粗细
        chart.getAxisRight().setEnabled(false);//隐藏右侧Y轴   默认是左右两侧都有Y轴

//        AxisLeft.setAxisMaximum(15);   //Y轴最大数值
        axisLeft.setAxisMinimum(-1);   //Y轴最小数值
        //Y轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
        axisLeft.setLabelCount(5, false);


        //取消右下角描述
        chart.getDescription().setEnabled(false);
        //图标的背景色
//        barChart.setBackgroundColor(Color.WHITE);
//        设置barChart图表转动阻力摩擦系数[0,1]
        chart.setDragDecelerationFrictionCoef(0.7f);

        //获取图例
        Legend legend = chart.getLegend();
        legend.setEnabled(false); // 是否显示
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);  //设置图例水平显示
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); //顶部
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); //右对其

        legend.setFormSize(12);
        legend.setXEntrySpace(20f);//x轴的间距
        legend.setYEntrySpace(0f); //y轴的间距
        legend.setYOffset(28f);  //图例的y偏移量
        legend.setXOffset(10f);  //图例x的偏移量
        legend.setTextColor(textColor); //图例文字的颜色
        legend.setTextSize(18);  //图例文字的大小
    }

    /**
     * 显示
     */
    public void show(final List<Pair<String, Integer>> list, int color)
    {
        List<BarEntry> listEntries = new ArrayList<>();

        for (int i = 0; i < list.size(); i++)
        {
            listEntries.add(new BarEntry(i, list.get(i).getSecond()));
        }

        chart.getXAxis().setLabelCount(list.size(), false);
        chart.getXAxis().setValueFormatter(new ValueFormatter()
        {
            @Override
            public String getAxisLabel(float v, AxisBase axis)
            {
                int i = (int) v;
                if (i >= 0 && i < list.size())
                {
                    return list.get((int) v).getFirst();
                }
                return "";
            }
        });

        BarDataSet barDataSet = new BarDataSet(listEntries, "");
        BarData barData = new BarData(barDataSet);

        barData.setBarWidth(0.65f);

        // barDataSet.setColor(Color.BLACK);  //柱子的颜色
        barDataSet.setColors(color);//设置柱子多种颜色  循环使用
        barDataSet.setValueTextColor(textColor);
        barDataSet.setValueTextSize(14);
//        barDataSet.setBarBorderColor(Color.CYAN);//柱子边框颜色
//        barDataSet.setBarBorderWidth(2);       //柱子边框厚度
//        barDataSet.setBarShadowColor(Color.RED);
        barDataSet.setHighlightEnabled(false);//选中柱子是否高亮显示  默认为true
//        barDataSet.setStackLabels(new String[]{"aaa","bbb","ccc"});
        barDataSet.setValueFormatter(new ValueFormatter()
        {
            @Override
            public String getFormattedValue(float value)
            {
                return (int) value + "人";
            }
        });

        chart.setData(barData);
    }
}